package com.example.javabasic.string;

import java.util.ArrayList;
import java.util.List;

public class TestString {


    public static void main(String[] args) {
//        test1();
//        test2();
//        test3();
//        test4();
//        test5();
        test6();
    }

    public static void test1() {
        String s1 = "helloworld";
        String s2 = "hello";
        String s3 = s2 + "world";
        System.out.println(s1 == s3);//false

        final String s4 = "hello";
        String s5 = s4 + s2;
        System.out.println(s5 == s1);//false  因为 s2是个变量

        String s6 = s4 + "world";
        System.out.println(s6 == s1);//因为final修饰  会被放入常量池中, 所以称为常量+常量  所以还是常量  所以  是true;


    }


    public static void test2(){
        String s = new String("1");
        s.intern();
        String s2 = "1";
        System.out.println(s == s2);//false


        String s3 = new String("1") + new String("1"); //类似与  new String("11");
        s3.intern();
        String s4 = "11";
        System.out.println(s3 == s4);//true

        String s5 = new String("1") + new String("1");
        String s6 = "11";//在字符串常量池中生成对象11
        s3.intern();
        System.out.println(s5 == s6);//false

    }


    public static void test3(){
        String x = "ab";
        String s = new String("a")+new String("b");//同比于  new String("ab")
        String s2 = s.intern(); //jdk8 中 字符串常量池没有创建ab  而是创建一个引用,指向new String("ab")
        System.out.println(s == "ab");
        System.out.println(s2 =="ab");
        System.out.println(s2 ==  x);
        // 因为  ab 在常量池中已经存在,  那么  s.intern 将s放入常量池时发现已经有了,
        // 那么返回 常量池中 "ab" 的地址,  那么  s2 就和x 的地址相同了
    }

    public static void test4(){
        String s = new String("ab") ;//会在串池中生成一个 "ab" s 是 一个对象  两个地址不一样
//        String s = new String("a")+new String("b"); //执行完以后不会在字符串常量池中生成"ab"  所以  s  仅仅是一个对象 地址;
        String x = s.intern(); //因为 前面 new String("ab") 已经在串池中创建了对象  因此不会新创建  而是直接返回 串池中 "ab" 的 地址, 因此 跟对象s 的地址不一样
        String y = "ab";
        System.out.println(s == "ab");
        System.out.println(y == s);
        System.out.println(x == s);
    }


    public static void test5(){
        String s = new String("ab");

        String s1 = new String("ab");
        System.out.println(s == s1);
    }


    public static void test6(){
        int[] a = {1,2,4,6,8,9};
        int[] b = {3,5,6,7,8,10,11,12,12,14,15,15};
        List<Integer> list = new ArrayList();
        int ia = 0;
        int ib = 0;
        while(ia<a.length && ib< b.length){
            if(a[ia]<b[ib]){
                list.add(a[ia]);
                ia++;
            }else{
                list.add(b[ib]);
                ib++;
            }
        }
        if(ia == a.length&& ib< b.length){
            for (int i = ib; i < b.length; i++) {
                list.add(b[i]);
            }
        }
        if(ib == b.length&& ia<a.length){
            for (int i = ia; i < a.length; i++) {
                list.add(a[i]);
            }
        }

        System.out.println(list);
    }


}
